package com.jxj.study.util.ImageTests;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.List;

public class ImageCombiner {

    public static void main(String[] args) {
        try {

            String path = "C:\\Users\\admin\\Desktop\\da\\jsj";
            File file = new File(path);
            if (!file.isDirectory()){
                return;
            }
            File[] files = file.listFiles();
            // 图片文件路径列表
//            List<String> imagePaths = Arrays.asList(
//                "path/to/image1.jpg",
//                "path/to/image2.jpg",
//                "path/to/image3.jpg"
//            );

            if (files == null) {
                return;
            }
            List<File> imagesFile = new ArrayList<>();
            for (File file1 : files) {
                if (file1.isFile()) {
                    imagesFile.add(file1);
                }
            }
            imagesFile.sort(Comparator.comparingLong(File::lastModified));
//
            // 加载所有图片
            BufferedImage[] images = new BufferedImage[imagesFile.size()];
            for (int i = 0; i < imagesFile.size(); i++) {
                images[i] = ImageIO.read(imagesFile.get(i));
            }
            
            // 计算总宽度和总高度（假设我们要垂直合成）
            int totalWidth = images[0].getWidth(); // 假设所有图片宽度相同，如果不是，取最大宽度
            int totalHeight = 0;
            for (BufferedImage img : images) {
                totalHeight += img.getHeight(); // 累加高度
                if (img.getWidth() > totalWidth) {
                    totalWidth = img.getWidth();
                }
            }
            
            // 创建目标图片
            BufferedImage combinedImage = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = combinedImage.createGraphics();
            
            // 设置背景色为白色（可选）
            g2d.setPaint(Color.WHITE);
            g2d.fillRect(0, 0, totalWidth, totalHeight);
            
            // 绘制图片到目标图片上，这里我们垂直绘制（从上到下）
            int currentY = 0;
            for (BufferedImage img : images) {
                g2d.drawImage(img, 0, currentY, null); // 水平位置固定，垂直位置逐个增加
                currentY += img.getHeight(); // 更新Y坐标以绘制下一张图片
            }
            
            g2d.dispose(); // 释放资源
            
            // 保存结果图片
            ImageIO.write(combinedImage, "jpg", new File(path + "\\..\\combined_image.jpg"));
            System.out.println("Images combined successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}